{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "a359b093",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "✅ 已生成 landuse_mapping.json\n"
     ]
    }
   ],
   "source": [
    "import json\n",
    "\n",
    "# 1. 读取原始 JSON 文件\n",
    "with open(\"popular_tag_values_over10.json\", \"r\", encoding=\"utf-8\") as f:\n",
    "    placenames = json.load(f)\n",
    "\n",
    "# 2. 定义关键词与用地类型映射规则\n",
    "landuse_rules = {\n",
    "    \"R\": {\n",
    "        \"name\": \"居住用地\",\n",
    "        \"keywords\": [\"住宅\", \"マンション\", \"アパート\", \"レジデンス\"]\n",
    "    },\n",
    "    \"A\": {\n",
    "        \"name\": \"公共管理服务设施用地\",\n",
    "        \"keywords\": [\"市役所\", \"区役所\", \"東京都庁\", \"役場\", \"官庁\", \"警察\", \"消防署\"]\n",
    "    },\n",
    "    \"B\": {\n",
    "        \"name\": \"商业服务业设施用地\",\n",
    "        \"keywords\": [\"コンビニ\", \"セブン\", \"ローソン\", \"ファミリーマート\", \"スーパー\", \"百貨店\", \n",
    "                     \"マクドナルド\", \"スターバックス\", \"レストラン\", \"ショッピング\", \"カフェ\", \"銀行\"]\n",
    "    },\n",
    "    \"M\": {\n",
    "        \"name\": \"工业用地\",\n",
    "        \"keywords\": [\"工場\", \"倉庫\", \"物流\", \"製造\"]\n",
    "    },\n",
    "    \"T\": {\n",
    "        \"name\": \"交通运输用地\",\n",
    "        \"keywords\": [\"駅\", \"バス\", \"駐車場\", \"空港\", \"地下鉄\", \"モノレール\", \"タクシー\"]\n",
    "    },\n",
    "    \"G\": {\n",
    "        \"name\": \"绿地与开放空间\",\n",
    "        \"keywords\": [\"公園\", \"緑地\", \"庭園\", \"森林\", \"広場\"]\n",
    "    },\n",
    "    \"E\": {\n",
    "        \"name\": \"教育科研用地\",\n",
    "        \"keywords\": [\"大学\", \"学校\", \"小学校\", \"中学校\", \"高校\", \"幼稚園\", \"保育園\"]\n",
    "    },\n",
    "    \"H\": {\n",
    "        \"name\": \"医疗卫生用地\",\n",
    "        \"keywords\": [\"病院\", \"診療所\", \"クリニック\", \"薬局\"]\n",
    "    }\n",
    "}\n",
    "\n",
    "# 3. 匹配规则\n",
    "def classify_landuse(name: str):\n",
    "    for code, info in landuse_rules.items():\n",
    "        for kw in info[\"keywords\"]:\n",
    "            if kw in name:\n",
    "                return {\"landuse\": info[\"name\"], \"code\": code}\n",
    "    return {\"landuse\": \"其他\", \"code\": \"O\"}  # 默认分类\n",
    "\n",
    "# 4. 生成地名与用地类型字典\n",
    "mapping = {}\n",
    "for place in placenames:\n",
    "    mapping[place] = classify_landuse(place)\n",
    "\n",
    "# 5. 保存结果为新 JSON 文件\n",
    "with open(\"landuse_mapping.json\", \"w\", encoding=\"utf-8\") as f:\n",
    "    json.dump(mapping, f, ensure_ascii=False, indent=2)\n",
    "\n",
    "print(\"✅ 已生成 landuse_mapping.json\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "306ea09f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "默认分类条目: 3923，已保存 -> landuse_mapping_default.json\n",
      "非默认分类条目: 203，已保存 -> landuse_mapping_filtered.json\n"
     ]
    }
   ],
   "source": [
    "# 从 landuse_mapping.json 中剔除默认分类数据，并单独保存\n",
    "import json, os\n",
    "\n",
    "in_path = \"landuse_mapping.json\"\n",
    "default_out = \"landuse_mapping_default.json\"\n",
    "filtered_out = \"landuse_mapping_filtered.json\"\n",
    "\n",
    "if not os.path.exists(in_path):\n",
    "    raise FileNotFoundError(f\"未找到 {in_path}，请先运行上面的分类步骤生成该文件。\")\n",
    "\n",
    "with open(in_path, \"r\", encoding=\"utf-8\") as f:\n",
    "    data = json.load(f)\n",
    "\n",
    "# data 预期为 { name: {landuse: ..., code: ...}, ... }\n",
    "\n",
    "def is_default_entry(v):\n",
    "    if isinstance(v, dict):\n",
    "        # 情况1：landuse 为数值 0 或字符串 '0'\n",
    "        lv = v.get(\"landuse\")\n",
    "        if lv == 0 or (isinstance(lv, str) and lv.strip() == \"0\"):\n",
    "            return True\n",
    "        # 情况2：landuse 为常见“默认/其他/未分类”字样\n",
    "        if isinstance(lv, str) and lv.strip() in {\"其他\", \"未分类\", \"未知\", \"默认\", \"default\", \"other\", \"unknown\"}:\n",
    "            return True\n",
    "        # 情况3：code 为 'O' 或 0\n",
    "        cd = v.get(\"code\")\n",
    "        if cd in {\"O\", 0, \"0\"}:\n",
    "            return True\n",
    "    return False\n",
    "\n",
    "only_default = {}\n",
    "only_non_default = {}\n",
    "\n",
    "if isinstance(data, dict):\n",
    "    for k, v in data.items():\n",
    "        if is_default_entry(v):\n",
    "            only_default[k] = v\n",
    "        else:\n",
    "            only_non_default[k] = v\n",
    "else:\n",
    "    raise ValueError(\"landuse_mapping.json 的结构不是字典，无法按键拆分。\")\n",
    "\n",
    "with open(default_out, \"w\", encoding=\"utf-8\") as f:\n",
    "    json.dump(only_default, f, ensure_ascii=False, indent=2)\n",
    "\n",
    "with open(filtered_out, \"w\", encoding=\"utf-8\") as f:\n",
    "    json.dump(only_non_default, f, ensure_ascii=False, indent=2)\n",
    "\n",
    "print(f\"默认分类条目: {len(only_default)}，已保存 -> {default_out}\")\n",
    "print(f\"非默认分类条目: {len(only_non_default)}，已保存 -> {filtered_out}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "python3.10-3d",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
